home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 June: Reference Library / Dev.CD Jun 00 RL Disk 1.toast / pc / technical documentation / develop / develop issue 29 / develop issue 29 code / acgis in c / www.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-07-07  |  6.2 KB  |  290 lines

  1. #include "www.h"    // Automatically includes "acgi.h"
  2.  
  3. #include <Threads.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7.  
  8. // -----------------------------------------------------
  9.  
  10. // [1]    Return the name of your log file.
  11.  
  12. char *WWWGetLogName(void)
  13. {
  14.     return "acgi.log";
  15. }
  16.  
  17. // [2]    Return the four default HTML error pages.
  18.  
  19. void WWWGetHTMLPages(Handle refused, Handle tooBusy, Handle noMemory, Handle unexpectedError)
  20. {
  21.     HTMLAppendFile(refused, "acgiRefused.html");
  22.     HTMLAppendFile(tooBusy, "acgiTooBusy.html");
  23.     HTMLAppendFile(noMemory, "acgiNoMemory.html");
  24.     HTMLAppendFile(unexpectedError, "acgiUnexpected.html");
  25. }
  26.  
  27. // [3]    Initialize your processing environment.
  28.  
  29. OSErr WWWInit(void)
  30. {
  31.     return (noErr);
  32. }
  33.  
  34. // [4]    Tear down your environment prior to quitting.
  35.  
  36. void WWWQuit(void)
  37. {
  38. }
  39.  
  40. // [5]    Do any periodic tasks.
  41.  
  42. OSErr WWWPeriodicTask(void)
  43. {
  44.     return (noErr);
  45. }
  46.  
  47. // [6]    Handle one POST request. Note how we use the YIELD() macro
  48. //        to check if the application is shutting down and terminate
  49. //        processing if so.
  50.  
  51. #define YIELD() { YieldToAnyThread(); \
  52.                     if (ACGIIsShuttingdown()) \
  53.                         return (errWWWRefused); }
  54.  
  55. OSErr WWWProcess(WWWRequest request)
  56. {
  57.     Handle r = HTMLGetResponseHandle(request);
  58.     char s[1024];
  59.     long len, i, n;
  60.     char name[512];
  61.     char value[512];
  62.     long iName, iValue;
  63.     Boolean gotOne;
  64.     OSErr err;
  65.  
  66.     err = HTMLAppendPString(r, "\p<HTML><HEAD><TITLE>ACGI</TITLE></HEAD>\r\n");
  67.  
  68.     YIELD();
  69.  
  70.     err = HTMLAppendCString(r, "<BODY><H1>ACGI Parameters</H1><TABLE BORDER=0>");
  71.  
  72.     YIELD();
  73.  
  74.     err = HTMLAppendCString(r, "<TR><TD ALIGN=RIGHT NOWRAP><B>Path arguments:</B></TD><TD>");
  75.  
  76.     YIELD();
  77.  
  78.  
  79.     if (HTTPCopyParam(request, p_path_args, s, 1023, &len))
  80.             err = HTMLAppendCString(r, s);
  81.  
  82.     YIELD();
  83.  
  84.     err = HTMLAppendCString(r, "</TD></TR><TR><TD ALIGN=RIGHT NOWRAP><B>User name:</B></TD><TD>");
  85.  
  86.     YIELD();
  87.  
  88.  
  89.     if (HTTPCopyParam(request, p_username, s, 1023, &len))
  90.             err = HTMLAppendCString(r, s);
  91.  
  92.     YIELD();
  93.  
  94.     err = HTMLAppendCString(r, "</TD></TR><TR><TD ALIGN=RIGHT NOWRAP><B>Password:</B></TD><TD>");
  95.  
  96.     YIELD();
  97.  
  98.  
  99.     if (HTTPCopyParam(request, p_password, s, 1023, &len))
  100.             err = HTMLAppendCString(r, s);
  101.  
  102.     YIELD();
  103.  
  104.     err = HTMLAppendCString(r, "</TD></TR><TR><TD ALIGN=RIGHT NOWRAP><B>From user:</B></TD><TD>");
  105.  
  106.     YIELD();
  107.  
  108.  
  109.     if (HTTPCopyParam(request, p_from_user, s, 1023, &len))
  110.             err = HTMLAppendCString(r, s);
  111.  
  112.     YIELD();
  113.  
  114.     err = HTMLAppendCString(r, "</TD></TR><TR><TD ALIGN=RIGHT NOWRAP><B>Client address:</B></TD><TD>");
  115.  
  116.     YIELD();
  117.  
  118.  
  119.     if (HTTPCopyParam(request, p_client_address, s, 1023, &len))
  120.             err = HTMLAppendCString(r, s);
  121.  
  122.     YIELD();
  123.  
  124.     err = HTMLAppendCString(r, "</TD></TR><TR><TD ALIGN=RIGHT NOWRAP><B>Server name:</B></TD><TD>");
  125.  
  126.     YIELD();
  127.  
  128.  
  129.     if (HTTPCopyParam(request,     p_server_name, s, 1023, &len))
  130.             err = HTMLAppendCString(r, s);
  131.  
  132.     YIELD();
  133.  
  134.     err = HTMLAppendCString(r, "</TD></TR><TR><TD ALIGN=RIGHT NOWRAP><B>Server port:</B></TD><TD>");
  135.  
  136.     YIELD();
  137.  
  138.  
  139.     if (HTTPCopyParam(request, p_server_port, s, 1023, &len))
  140.             err = HTMLAppendCString(r, s);
  141.  
  142.     YIELD();
  143.  
  144.     err = HTMLAppendCString(r, "</TD></TR><TR><TD ALIGN=RIGHT NOWRAP><B>Script name:</B></TD><TD>");
  145.  
  146.     YIELD();
  147.  
  148.  
  149.     if (HTTPCopyParam(request, p_script_name, s, 1023, &len))
  150.             err = HTMLAppendCString(r, s);
  151.  
  152.     YIELD();
  153.  
  154.     err = HTMLAppendCString(r, "</TD></TR><TR><TD ALIGN=RIGHT NOWRAP><B>Content type:</B></TD><TD>");
  155.  
  156.     YIELD();
  157.  
  158.  
  159.     if (HTTPCopyParam(request, p_content_type, s, 1023, &len))
  160.             err = HTMLAppendCString(r, s);
  161.  
  162.     YIELD();
  163.  
  164.     err = HTMLAppendCString(r, "</TD></TR><TR><TD ALIGN=RIGHT NOWRAP><B>Referer:</B></TD><TD>");
  165.  
  166.     YIELD();
  167.  
  168.  
  169.     if (HTTPCopyParam(request, p_referer, s, 1023, &len))
  170.             err = HTMLAppendCString(r, s);
  171.  
  172.     YIELD();
  173.  
  174.     err = HTMLAppendCString(r, "</TD></TR><TR><TD ALIGN=RIGHT NOWRAP><B>User agent:</B></TD><TD>");
  175.  
  176.     YIELD();
  177.  
  178.  
  179.     if (HTTPCopyParam(request, p_user_agent, s, 1023, &len))
  180.             err = HTMLAppendCString(r, s);
  181.  
  182.     YIELD();
  183.  
  184.     err = HTMLAppendCString(r, "</TD></TR><TR><TD ALIGN=RIGHT NOWRAP><B>Action:</B></TD><TD>");
  185.  
  186.     YIELD();
  187.  
  188.  
  189.     if (HTTPCopyParam(request, p_action, s, 1023, &len))
  190.             err = HTMLAppendCString(r, s);
  191.  
  192.     YIELD();
  193.  
  194.     err = HTMLAppendCString(r, "</TD></TR><TR><TD ALIGN=RIGHT NOWRAP><B>Action path:</B></TD><TD>");
  195.  
  196.     YIELD();
  197.  
  198.  
  199.     if (HTTPCopyParam(request, p_action_path, s, 1023, &len))
  200.             err = HTMLAppendCString(r, s);
  201.  
  202.     YIELD();
  203.  
  204.     err = HTMLAppendCString(r, "</TD></TR><TR><TD ALIGN=RIGHT NOWRAP><B>Method:</B></TD><TD>");
  205.  
  206.     YIELD();
  207.  
  208.  
  209.     if (HTTPCopyParam(request, p_method, s, 1023, &len))
  210.             err = HTMLAppendCString(r, s);
  211.  
  212.     YIELD();
  213.  
  214.     err = HTMLAppendCString(r, "</TD></TR><TR><TD ALIGN=RIGHT NOWRAP><B>Client IP:</B></TD><TD>");
  215.  
  216.     YIELD();
  217.  
  218.  
  219.     if (HTTPCopyParam(request, p_client_ip, s, 1023, &len))
  220.             err = HTMLAppendCString(r, s);
  221.  
  222.     YIELD();
  223.  
  224.     err = HTMLAppendCString(r, "</TD></TR><TR><TD ALIGN=RIGHT NOWRAP VALIGN=TOP><B>Full request:</B></TD><TD>");
  225.  
  226.     YIELD();
  227.  
  228.  
  229.     if (HTTPCopyParam(request, p_full_request, s, 1023, &len))
  230.             err = HTMLAppendCString(r, s);
  231.  
  232.     YIELD();
  233.  
  234.     err = HTMLAppendCString(r, "</TD></TR><TR><TD ALIGN=RIGHT NOWRAP><B>Connection ID:</B></TD><TD>");
  235.  
  236.     YIELD();
  237.  
  238.  
  239.     if (HTTPCopyParam(request, p_connection_id, s, 1023, &len))
  240.             err = HTMLAppendCString(r, s);
  241.  
  242.     YIELD();
  243.  
  244.     err = HTMLAppendCString(r, "</TD></TR><TR><TD ALIGN=RIGHT NOWRAP VALIGN=TOP><B>Search Arguments:</B></TD><TD>");
  245.  
  246.     YIELD();
  247.  
  248.     n = HTTPGetNumSrchArgs(request);
  249.     if (n > 0) {
  250.         for (i = 1; i <= n; i++) {
  251.             gotOne = HTTPGetSrchArgAt(request, i, name, 511, &iName, value, 511, &iValue);
  252.             if (gotOne) {
  253.                 if (i > 1) err = HTMLAppendCString(r, "<BR>");
  254.                 err = HTMLAppendCString(r, name);
  255.                 err = HTMLAppendCString(r, " = ");
  256.                 err = HTMLAppendCString(r, value);
  257.             }
  258.             YIELD();
  259.         }
  260.     }
  261.     else 
  262.         err = HTMLAppendCString(r, "(none)");
  263.  
  264.     err = HTMLAppendCString(r, "</TD></TR><TR><TD ALIGN=RIGHT NOWRAP VALIGN=TOP><B>Post Arguments:</B></TD><TD>");
  265.  
  266.     YIELD();
  267.  
  268.     n = HTTPGetNumPostArgs(request);
  269.     if (n > 0) {
  270.         for (i = 1; i <= n; i++) {
  271.             gotOne = HTTPGetPostArgAt(request, i, name, 511, &iName, value, 511, &iValue);
  272.             if (gotOne) {
  273.                 if (i > 1) err = HTMLAppendCString(r, "<BR>");
  274.                 err = HTMLAppendCString(r, name);
  275.                 err = HTMLAppendCString(r, " = ");
  276.                 err = HTMLAppendCString(r, value);
  277.             }
  278.             YIELD();
  279.         }
  280.     }
  281.     else 
  282.         err = HTMLAppendCString(r, "(none)");
  283.     
  284.     YIELD();
  285.  
  286.     err = HTMLAppendCString(r, "</UL></TD></TR></TABLE>\r\n</BODY>\r\n</HTML>\r\n");
  287.  
  288.     return (err);
  289. }
  290.